var
,在ES6之後新增了let
、const
。使得除了只能用函式定義範疇,也能以區塊定義。{}
定義,比如可以在if
判斷式、for
迴圈語法中看見。if (true) {
// Hi,我是區塊。
}
for (let i = 0; i < 5; i++) {
console.log(i); // Hi,我也是區塊
}
在JavaScript中,區塊範疇是指變數在某一區塊內的作用範圍。
在某個區塊內定義的變數只在該區塊內可見,區塊外無法取得這些變數。
let
和const
都具有區塊範疇,因此使用let
和const
定義的變數只在它們所在的區塊內有效。
相對的var
,具有函式範疇(或稱全域範疇),即使它是在區塊內聲明,它的作用範圍仍是函式內(或全域作用範圍)。
範例:
function testBlockScope() {
if (true) {
var a = 10 // a變數經由var宣告,具有函式範疇,在這個if區塊內有效。
let b = 20; // b變數經由let宣告,具有區塊範疇,只在這個if區塊內有效。
console.log(a); // 輸出 10
console.log(b); // 輸出 20
}
console.log(a); // a變數經由var宣告,在函式內的所有區塊內都可見,所以在這個if區塊外也有效:輸出 10
console.log(b); // b變數經由let宣告,因此在這個if區塊外無效會報錯:ReferenceError: a is not defined。
}
testBlockScope();